package com.webdesign.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.webdesign.entity.TbUser;

public class InputExcelUtil {
	/** 
     * POI:解析Excel文件中的数据并把每行数据封装成一个实体
     * 2003工作表 
     * @param fis 文件输入流 
     * @return List<EmployeeInfo> Excel中数据封装实体的集合 
     */  
    public static List<TbUser> importExcel2003(InputStream fis) {  
          
        List<TbUser> tbUserList = new ArrayList<TbUser>();  
        TbUser tbUser = null;  
          
        try {  
            //创建Excel工作薄   
            HSSFWorkbook hwb = new HSSFWorkbook(fis);
            //得到第一个工作表   
            HSSFSheet sheet = hwb.getSheetAt(0);  
            HSSFRow row = null;    
            //遍历该表格中所有的工作表，i表示工作表的数量 getNumberOfSheets表示工作表的总数    
            for(int i = 0; i < hwb.getNumberOfSheets(); i++) {  
                sheet = hwb.getSheetAt(i);  
                //遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数   
                for(int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) {  
                    row = sheet.getRow(j);  
                    tbUser = new TbUser();  
                      
                    //此方法调用getCellValue(HSSFCell cell)对解析出来的数据进行判断，并做相应的处理   
                    if(getCellValueHSSF(row.getCell(0)) != null && !"".equals(getCellValueHSSF(row.getCell(0)))) {  
                    	tbUser.setUserid(getCellValueHSSF(row.getCell(0)));  
                    }  
                    
                    tbUser.setUsername(getCellValueHSSF(row.getCell(1)));
                    tbUserList.add(tbUser);
                }  
                  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return tbUserList;  
    }  
    //判断从2003Excel文件中解析出来数据的格式   
    private static String getCellValueHSSF(HSSFCell cell){  
        String value = null;  
        //简单的查检列类型   
        switch(cell.getCellType())  
        {  
            case HSSFCell.CELL_TYPE_STRING://字符串   
                value = cell.getRichStringCellValue().getString();  
                break;  
            case HSSFCell.CELL_TYPE_NUMERIC://数字   
                long dd = (long)cell.getNumericCellValue();  
                value = dd+"";  
                break;  
            case HSSFCell.CELL_TYPE_BLANK:  
                value = "";  
                break;     
            case HSSFCell.CELL_TYPE_FORMULA:  
                value = String.valueOf(cell.getCellFormula());  
                break;  
            case HSSFCell.CELL_TYPE_BOOLEAN://boolean型值   
                value = String.valueOf(cell.getBooleanCellValue());  
                break;  
            case HSSFCell.CELL_TYPE_ERROR:  
                value = String.valueOf(cell.getErrorCellValue());  
                break;  
            default:  
                break;  
        }  
        return value;  
    }
    
    /** 
     * POI:解析Excel文件中的数据并把每行数据封装成一个实体
     * 2007工作表 
     * @param fis 文件输入流 
     * @return List<EmployeeInfo> Excel中数据封装实体的集合 
     */  
    public static List<TbUser> importExcel2007(InputStream fis) {  
          
        List<TbUser> tbUserList = new ArrayList<TbUser>();  
        TbUser tbUser = null;  
          
        try {  
            //创建Excel工作薄   
            XSSFWorkbook hwb = new XSSFWorkbook(fis);
            //得到第一个工作表   
            XSSFSheet sheet = hwb.getSheetAt(0);  
            XSSFRow row = null;    
            //遍历该表格中所有的工作表，i表示工作表的数量 getNumberOfSheets表示工作表的总数    
            for(int i = 0; i < hwb.getNumberOfSheets(); i++) {  
                sheet = hwb.getSheetAt(i);  
                //遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数   
                for(int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) {  
                    row = sheet.getRow(j);  
                    tbUser = new TbUser();  
                      
                    //此方法调用getCellValue(HSSFCell cell)对解析出来的数据进行判断，并做相应的处理   
                    if(getCellValueXSSF(row.getCell(0)) != null && !"".equals(getCellValueXSSF(row.getCell(0)))) {  
                    	tbUser.setUserid(getCellValueXSSF(row.getCell(0)));  
                    }  
                    
                    tbUser.setUsername(getCellValueXSSF(row.getCell(1)));
                    tbUserList.add(tbUser);
                }  
                  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return tbUserList;  
    }  
    //判断从2007Excel文件中解析出来数据的格式   
    private static String getCellValueXSSF(XSSFCell cell){  
        String value = null;  
        //简单的查检列类型   
        switch(cell.getCellType())  
        {  
            case HSSFCell.CELL_TYPE_STRING://字符串   
                value = cell.getRichStringCellValue().getString();  
                break;  
            case HSSFCell.CELL_TYPE_NUMERIC://数字   
                long dd = (long)cell.getNumericCellValue();  
                value = dd+"";  
                break;  
            case HSSFCell.CELL_TYPE_BLANK:  
                value = "";  
                break;     
            case HSSFCell.CELL_TYPE_FORMULA:  
                value = String.valueOf(cell.getCellFormula());  
                break;  
            case HSSFCell.CELL_TYPE_BOOLEAN://boolean型值   
                value = String.valueOf(cell.getBooleanCellValue());  
                break;  
            case HSSFCell.CELL_TYPE_ERROR:  
                value = String.valueOf(cell.getErrorCellValue());  
                break;  
            default:  
                break;  
        }  
        return value;  
    }
}
